package com.dolphin.aiagentplatform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dolphin.aiagentplatform.model.dto.ChatSessionInfoDTO;
import com.dolphin.aiagentplatform.model.entity.ChatSession;

import java.util.List;

/**
 * 聊天会话服务接口
 */
public interface ChatSessionService extends IService<ChatSession> {

    /**
     * 保存聊天会话
     *
     * @param chatId    聊天ID
     * @param userId    用户ID
     * @param agentType 智能体类型
     */
    void saveChatSession(String chatId, Long userId, String agentType);

    /**
     * 根据代理类型获取聊天ID列表
     *
     * @param agentType 代理类型
     * @return 聊天ID列表
     */
    List<String> getChatIdListByAgentType(String agentType);

    /**
     * 根据用户ID和代理类型获取聊天ID列表
     *
     * @param userId    用户ID
     * @param agentType 代理类型
     * @return 聊天ID列表
     */
    List<String> getChatIdListByUserId(Long userId, String agentType);

    /**
     * 获取用户最近的聊天ID
     *
     * @param userId    用户ID
     * @param agentType 代理类型
     * @return 最近的聊天ID
     */
    String getLatestChatIdByUserId(Long userId, String agentType);

    /**
     * 更新最后消息时间
     *
     * @param chatId 聊天ID
     * @return 更新结果
     */
    boolean updateLastMessageTime(String chatId);

    /**
     * 归档聊天会话
     *
     * @param chatId 聊天ID
     * @return 归档结果
     */
    boolean archiveChat(String chatId);
    
    /**
     * 获取聊天会话信息
     *
     * @param chatId 聊天ID
     * @return 聊天会话信息
     */
    ChatSessionInfoDTO getChatSessionInfo(String chatId);
    
    /**
     * 批量获取聊天会话信息
     *
     * @param chatIds 聊天ID列表
     * @return 聊天会话信息列表
     */
    List<ChatSessionInfoDTO> getChatSessionInfoBatch(List<String> chatIds);
    
    /**
     * 根据用户ID和代理类型获取聊天会话信息列表
     *
     * @param userId    用户ID
     * @param agentType 代理类型
     * @return 聊天会话信息列表
     */
    List<ChatSessionInfoDTO> getChatSessionInfoByUserId(Long userId, String agentType);

    /**
     * 更新聊天会话标题
     *
     * @param chatId 聊天ID
     * @param title  新标题
     * @return 更新结果
     */
    boolean updateChatSessionTitle(String chatId, String title);
    
    /**
     * 删除聊天会话（逻辑删除）
     *
     * @param chatId 聊天ID
     * @param userId 用户ID (用于验证权限)
     * @return 删除结果
     */
    boolean deleteChatSession(String chatId, Long userId);
}
